package cn.jdemo.algorithm.dynamicProgramming;

/**
 * 动态规划算法（Dynamic Programming，简称 DP）: 求最值(求解动态规划的核⼼问题是穷举)
 *  1 存在「重叠⼦问题」: 「备忘录」或者「DP table」来优化穷举过程，避免不必要的计算;
 *  2 具备「最优⼦结构」: 才能通过⼦问题的最值得到原问题的最值;
 *  3 状态转移方程 : 虽然动态规划的核⼼思想就是穷举求最值，但是问题可以千变万化，穷举所有可⾏解其实并不是⼀件容易的事，
 *              只有列出正确的「状态转移⽅程」才能正确地穷举;
 *
 * 动态规划三要素: 状态转移方程，重叠子问题，最优子结构等高大上的词汇。
 *
 * 写出状态转移⽅程是最困难的，这也就是为什么很多朋友觉得动态规划问题困难的原因，
 * 我来提供我研究出来的⼀个思维框架，辅助你思考状态转移⽅程：
 * 明确「状态」 -> 定义 dp 数组/函数的含义 -> 明确「选择」-> 明确 base case。
 *
 * @date 2021/2/18
 */
public class AllInOne {
}
